最稳定可靠,PostgreSQL 12.1版本正式发布!
1. PG 12.1 Beta发布了!
PostgreSQL全球开发组宣布,PostgreSQL 12的第一个测试版(PG 12.1 Beta)现已开放下载。该版本中可预览的所有特性都将延续至PG 12的最终版本中,不过在最终版本发布之前,一些细节仍可能发生变动。
本着PG社区的开源精神,我们强烈呼吁大家在自己的数据库系统中测试PG 12的新特性,从而帮助我们更多地消除可能存在的任何bug以及问题。当然,我们并不是建议您在自己的生产环境中应用PG 12.1 Beta,而是希望您寻找一种可以利用您现有的经典应用对该版本进行测试的一种方法。
PG 12秉承了我们的一直以来为世界最先进的开源关系型数据库提供稳定可靠版本的标准。因此为了帮助我们确保这一点,我们非常需要您积极的测试及反馈。
2. PG 12特性概览
2.1 索引的性能、功能性以及管理
PG 12通过改善索引的空间管理,进而提升了标准B树索引的总体性能。除了性能上的提升,这些改进也提供了对频繁修改的索引所占用空间的缩减。
此外,PG 12增加了在线重建索引的功能,该功能可以让您的REINDEX操作不再阻塞任何对索引的写入。当您在生产环境中管理PG数据库时,该功能可以有效解决由于漫长地重建索引而导致的迫不得已的业务中断。
PG 12对一些特定的索引机制的功能进行了扩展。例如在PG 11中引入的用于创建覆盖索引(covering index)的include子句,在PG 12中将同样适用于创建GiST索引。SP-GiST索引现在支持对支持距离(<->)操作的数据类型使用k近邻法(K-nearest neighbor K-NN)查询。
在PG 12中,创建一个GiST、GIN或是 SP-GiST索引所产生的日志先行(write-ahead log --WAL)的消耗将大大减少。这也为PG集群对磁盘的利用,以及一些像连续归档(continuous archiving)、流复制(streaming replication)这样的功能,提供了诸多益处。
2.2 内嵌WITH查询(Common table expressions)
公用表表达式(Common table expressions),亦被称为WITH查询,现在可以自动内嵌到一个查询语句中。但这些WITH查询须符合如下条件:
不是递归的
没有任何副作用
在整条sql语句的后续部分中只会被引用一次
这将移除从PG 8.4引入WITH子句时就已存在的"optimization fence"。
如果有需要,可以使用MATERIALIZED子句来强制使一个WITH查询物化。如下:
WITH c AS MATERIALIZED ( SELECT * FROM a WHERE a.x % 4 = 0 ) SELECT * FROM c JOIN d ON d.y = a.x;
2.3 分区
对拥有上千个分区的表中检索一小部分分区的操作的处理,PG 12进行了性能上的优化。
PG 12也对分区表进行INSERT以及COPY操作时的性能进行了改善。PG 12中执行ATTACH PARTITION操作将不再阻塞对分区表并发查询。此外,PG 12中将允许创建关联到分区表的外键。
2.4 JSON path queries per SQL/JSON specification
PG12现在支持SQL:2016标准中的每一个SQL/JSON规范的JSON path查询。就像查询XML使用的Xpath一样,JSON path表达式可以让您除了对json文档中的值进行比较以外,还可以让您计算多种多样的算术表达式和函数。
这些表达式中的一部分还可以使用GIN索引来提高计算效率,从而高效的对JSON数据集进行检索。
2.5 校对
PG 12现在支持对ICU提供的排序规则进行不区分大小写(case-insensitive)、不区分口音(accent-insensitive)的比较,亦被称为非确定性校对(nondeterministic collations)。
当该特性被使用时,这些collation可以为排序和比较提供便利,但同时可能会因为对字符串额外的检查,而导致额外的性能损失。
2.6 Most-common Value Extended Statistics
在PG 10中引入的CREATE STATISTICS,是为了在多列上收集更复杂的统计信息,从而帮助产生更准确的执行计划。在PG 12中,收集统计信息支持most-common value statistics。这将进一步提升当数据分布不均匀时产生的执行计划的准群性。
2.7 被生成的列(Generated Columns)
PG 12允许创建生成列(就是Oracle的虚拟列)。这是一种列值是由其他列的值计算得出的列。该特性允许创建可存储的(stored)生成列,即在insert或update时计算出生成列的列值并存储于物理磁盘上。虚拟的(Virtual)生成列,是只有在其作为查询的一部分时才生成,目前该功能尚未实现。
注:生成列分为俩种stored和virtual,stored类型是写入是计算的得到,而virtual类型是只有读时才计算。
2.8 可插拔的表存储接口(Pluggable Table Storage Interface)
PG 12引入可插拔表存储接口(pluggable table storage interface),允许创建和使用不同的表存储方法。新的访问方法可以通过使用CREATE ACCESS METHOD的指令被添加到PG集群中,并且随后可以使用CREATE TABLE的新子句—USING,将新的访问方法添加的具体的表中。
一个表存储接口可以通过创建一个新的表访问方法来定义。
在PG 12中默认使用的存储接口是堆访问方法(heap access method),该方法是目前唯一的内置方法。
2.9 块校验和(Page Checksums)
pg_verify_checkums这条指令现在更名为pg_checksums,并且可以在一个离线的PG集群中进行启用和禁用。在之前的版本,该功能只能在使用initdb对集群初始化时启用。
2.10 身份认证以及连接安全(Authentication & Connection Security)
GSSAPI现在支持客户端和服务器端加密,该功能可以在pg_hba.conf 中使用hostgssenc和hostnogssenc这俩中记录类型进行指定。
如果PG 12是使用OpenLDAP进行编译的,那么PG 12还可以发现基于DNS SRV记录的LDAP servers。
3. 行为变更注意事项
PG 12中引入一些改变,这将对您惯用的管理时进行的操作和行为有一定影响。下面会列举这些变化中的一小部分,更多的其他改变的相关信息,可以从Release Notes的"Migrating to Version 12"部分中获取(https://www.postgresql.org/docs/devel/release-12.html)
1. recovery.conf这个参数文件现在已经合并到postgresql.conf文件中了。如果PG检测到有recovery.conf的存在,PG将不会成功启动。如果想让PG处于非主(non-primary)模式,您可以使用recovery.signal和standby.signal这两个文件。
您可以通过下面的连接获得更多的归档恢复(archive recovery)的信息:https://www.postgresql.org/docs/devel/runtime-config-wal.html#RUNTIME-CONFIG-WAL-ARCHIVE-RECOVERY
1. Just-in-Time (JIT)编译现在时默认开启的。
2. PG 12将不再允许使用WITH OIDs子句将OIDs添加到用户创建的表中。对于已经存在的使用WITH OIDs子句创建的表(例如列名是OID)的操作需要及时进行调整。
3. PG12中查询系统表时运行select *的指令,也会输出系统表的行的OID,而不再需要像之前的版本进行显示的指定OID列。
4. 其他特性
许多其他的新特性和改进已经被添加到PG 12中,其中一些特性和改变对于特定的用户来说,可能比上面提到的特性还重要。所以完整的新特性和新改进的请您查看Release Notes:https://www.postgresql.org/docs/devel/release-12.html。
5. BUG和兼容性的测试
每一个PG版本的稳定性,都非常依赖于您和您的团队使用您们的工作负载和测试工具对即将到来的版本进行不断的测试,从而帮助我们在PG 12公共版本发布之前找出更多的BUG和功能退步的地方。
由于这是一个测试版本,所以可能存在对于数据库行为、一些特性的细节以及各种接口(APIs)的一些细小的改变。您的反馈和测试将帮助我们最终确定该对新特性进行怎样的微调,所以恳请您尽快将其投入测试。用户测试的质量将帮助我们确定最终版本该合适发布。
一系列开放性问题已在PostgreSQL wiki对您公开。您可以使用如下的格式将bug在PG官网上告知我们:https://www.postgresql.org/account/submitbug/
6. 测试版本发布计划
这是PG 12的第一个测试版本,2019年年底发布最终版本之前,我们PG项目组将陆续根据测试需求发布更多的测试版本。
更进一步的详情请到如下网址了解:https://www.postgresql.org/developer/beta/
7. 相关链接
下载:https://www.postgresql.org/download/
测试版本信息:https://www.postgresql.org/developer/beta/
PG 12 Beta版本说明:https://www.postgresql.org/docs/devel/release-12.html
PG 12开放问题汇总:https://wiki.postgresql.org/wiki/PostgreSQL_12_Open_Items
提交BUG:https://www.postgresql.org/account/login/?next=/account/submitbug/
若翻译中出现一些技术上的错误,欢迎的大家在评论区指正,期待与您的互动!
燕鑫
云和恩墨交付工程师
往期推荐
编辑:尹文敏
公司简介 | 恩墨学院 | 招聘 | DTCC | 数据技术嘉年华 | 免费课程 | 入驻华为严选商城
zCloud | SQM | Bethune Pro2 | zData一体机 | Mydata一体机 | ZDBM 备份一体机
Oracle技术架构 | 免费课程 | 数据库排行榜 | DBASK问题集萃 | 技术通讯
升级迁移 | 性能优化 | 智能整合 | 安全保障 | 架构设计 | SQL审核 | 分布式架构 | 高可用容灾 | 运维代维
云和恩墨大讲堂 | 一个分享交流的地方
长按,识别二维码,加入万人交流社群
请备注:云和恩墨大讲堂